home *** CD-ROM | disk | FTP | other *** search
- {
- > Thanks for writing a working Pascal source. Hopefully it will
- > work with 640x480 resolution (320x200 is a bit grainy, specieally
- > with the default palette.)
-
- I changed Norbert's source a little. Now it looks nicer, and I believe it's
- even a fraction faster (not sure, though, didn't time it):
- }
-
- {$G+,N+,E-} { if you have no CoPro, set E+ }
-
- { Reals Complex
- -1 0
- -0.1 0.8
- 0.3 -0.5
- -1.139 0.238
- }
-
- program Julia;
- const Gseg : word = $a000;
- Type real = double;
- var Cx,Cy,Xo,Yo,X1,Y1 : real; Mx,My,A,B,I,Orb : word;
-
- procedure Pset(X,Y : word; C : byte); assembler;
- asm
- mov es,Gseg
- mov ax,[Y]
- shl ax,6
- mov di,ax
- shl ax,2
- add di,ax
- add di,[X]
- mov al,[C]
- mov [es:di],al
- end;
-
- function keypressed : boolean; assembler; asm
- mov ah,0bh; int 21h; and al,0feh; end;
-
- procedure Setpalette;
- var I : byte;
- begin
- for I := 1 to 64 do begin
- port[$3c8] := I;
- port[$3c9] := 10+I div 3;
- port[$3c9] := 10+I div 3;
- port[$3c9] := 15+round(I/1.306122449);
- end;
- end;
-
- begin
- write('Real part: '); readln(Cx);
- write('Imaginary part: '); readln(Cy);
- asm mov ax,13h; int 10h; end;
- Setpalette;
- Mx := 319; My := 199;
- for A := 1 to Mx do
- for B := 1 to My do begin
- Xo := -2+A/(Mx/4); { X complex plane coordinate }
- Yo := 2-B/(My/4); { Y complex plane coordinate }
- Orb := 0; I := 0;
- repeat
- X1 := Xo*Xo-Yo*Yo+Cx;
- Y1 := 2*Xo*Yo+Cy;
- Xo := X1;
- Yo := Y1;
- inc(I);
- until (I = 64) or (X1*X1+Y1*Y1 > 4);
- if I <> 64 then Orb := I;
- Pset(A,B,Orb); { Plot orbit }
- end;
- while not keypressed do;
- asm mov ax,3; int 10h; end;
- end.
-